package com.ce.pms.system.custservice.service.impl;

import java.util.ArrayList;
import java.util.List;

import com.ce.pms.base.service.impl.PmsBaseServiceImpl;
import com.ce.pms.base.vo.SearchVO;
import com.ce.pms.exception.BusinessException;
import com.ce.pms.system.custservice.dao.IReturnVisitWayDao;
import com.ce.pms.system.custservice.model.ReturnVisitWayDO;
import com.ce.pms.system.custservice.service.IReturnVisitWayService;
import com.ce.pms.system.custservice.vo.ReturnVisitWayVO;
import com.ce.util.BeanUtil;
import com.ce.util.BlankUtil;
import com.sitechasia.webx.core.support.Page;
import com.sitechasia.webx.core.utils.base.PopulateUtil;

public class ReturnVisitWayServiceImpl extends PmsBaseServiceImpl implements
		IReturnVisitWayService{
	/**
	 * 方法描述: 分页查询所有回访方式列表
	 * @author 胡煦
	 * Create on:2008-7-30
	 * @param pageNo,pageSize,order
	 * @return 返回当前页的查询结果
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public Page queryAllReturnVisitWayByPage(SearchVO searchVO){
		Page page = returnVisitWayDao.queryAllReturnVisitWayByPage(searchVO);
		List<ReturnVisitWayDO> returnVisitWayDOlist = page.getResult();
		List<ReturnVisitWayVO> returnVisitWayVOlist = new ArrayList<ReturnVisitWayVO>();
		for(ReturnVisitWayDO returnVisitWayDO : returnVisitWayDOlist){
			ReturnVisitWayVO returnVisitWayVO = this.assembleD2V(returnVisitWayDO, null);
			returnVisitWayVOlist.add(returnVisitWayVO);
		}
		page.setResult(returnVisitWayVOlist);
		return page;
	}
	/**
	 * 方法描述: 有效的回访方式列表查询方法
	 * @author 胡煦
	 * Create on:2008-12-16
	 * @param name
	 * @return List<ReturnVisitWayVO>
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public List<ReturnVisitWayVO> getReturnVisitWayList() {
		Page page = returnVisitWayDao.getReturnVisitWayList(null,true);
		List<ReturnVisitWayDO> returnVisitWayDOList = page.getResult();
		List<ReturnVisitWayVO> returnVisitWayVOList = new ArrayList<ReturnVisitWayVO>();
		for(ReturnVisitWayDO returnVisitWayDO : returnVisitWayDOList){
			ReturnVisitWayVO returnVisitWayVO = this.assembleD2V(returnVisitWayDO, null);
			returnVisitWayVOList.add(returnVisitWayVO);
		}
		return returnVisitWayVOList;
	}
	/**
	 * 方法描述: 根据ID查询VO方法
	 * @author 胡煦
	 * Create on:2008-12-22
	 * @param keyword
	 * @return ReturnVisitWayVO
	 * Edit author:
	 * Edit on:
	 * 修改原因：
	 */
	public ReturnVisitWayVO findReturnVisitWayVOById(Long keyword) {
		if(BlankUtil.isBlank(keyword)){
			return null;
		}
		return this.assembleD2V(returnVisitWayDao.findById(keyword), null);
	}
	/**
	 * 方法描述: 回访方式增加方法
	 *
	 * @author 胡煦 Create on:2008-12-16
	 * @param returnVisitWayVO
	 * @return ReturnVisitWayVO Edit author: Edit on: 修改原因：
	 */
	public ReturnVisitWayVO addReturnVisitWay(ReturnVisitWayVO returnVisitWayVO) {
		if(BlankUtil.isBlank(returnVisitWayVO)){
			return null;
		}
		this.checkReturnVisitWayByName(returnVisitWayVO.getName(), null);
		ReturnVisitWayDO returnVisitWayDO = this.assembleV2D(returnVisitWayVO, null);
		returnVisitWayDO = returnVisitWayDao.saveObject(returnVisitWayDO);
		returnVisitWayVO.setKeyword(returnVisitWayDO.getKeyword());
		return returnVisitWayVO;
	}
	/**
	 * 方法描述: 回访方式删除方法
	 *
	 * @author 胡煦 Create on:2008-12-16
	 * @param returnVisitRuleId
	 * @return boolean Edit author: Edit on: 修改原因：
	 */
	public boolean deleteReturnVisitWay(Long returnVisitWayId) {
		if(BlankUtil.isBlank(returnVisitWayId)){
			return false;
		}
		try {
			returnVisitWayDao.deleteObjectById(returnVisitWayId);
		} catch (RuntimeException e) {
			e.printStackTrace();
			throw new BusinessException(
					"custservice:system_delete_inused_exception",
					BusinessException.WARNING);
		}
		return true;
	}
	/**
	 * 方法描述: 回访方式修改方法
	 *
	 * @author 胡煦 Create on:2008-12-16
	 * @param returnVisitWayVO
	 * @return ReturnVisitWayVO Edit author: Edit on: 修改原因：
	 */
	public ReturnVisitWayVO editReturnVisitWay(ReturnVisitWayVO returnVisitWayVO) {
		if(BlankUtil.isBlank(returnVisitWayVO)){
			return null;
		}
		this.checkReturnVisitWayByName(returnVisitWayVO.getName(), returnVisitWayVO.getKeyword());
		ReturnVisitWayDO returnVisitWayDO = this.assembleV2D(returnVisitWayVO, null);
		ReturnVisitWayDO oldReturnVisitWayDO = returnVisitWayDao.findById(returnVisitWayVO.getKeyword());
		modifyInfo(oldReturnVisitWayDO.getSysInfo(), returnVisitWayVO.getModifier());
		BeanUtil.convertVoAsDo(returnVisitWayDO, oldReturnVisitWayDO);
		return returnVisitWayVO;
	}
	/**
	 * 功能描述:校验回访方式名字是否存在<br>
	 * 注：新建判断name的唯一性时，oldId传为null；修改判断name的唯一性时，则需要传入本身的ID<br>
	 * @param name
	 * @param id
	 * @return
	 * Create author:胡煦
	 * Create on:2008-7-18
	 * Edit author:
	 * Edit on:
	 * Why:
	 */
	public void checkReturnVisitWayByName(String name,Long id){
		Long count = returnVisitWayDao.countReturnVisitWayByName(name, id);
		if(count > 0){
			throw new BusinessException(
					"custservice:system_name_exist_exception",
					BusinessException.WARNING);
		}
	}

	/**
	 * 方法描述: ReturnVisitWayVO To returnVisitWayDO
	 * @author 胡煦
	 * Create on:2008-12-16
	 * @param returnVisitWayVO
	 * @param returnVisitWayDO
	 * @return ReturnVisitWayDO
	 */
	private ReturnVisitWayDO assembleV2D(ReturnVisitWayVO returnVisitWayVO, ReturnVisitWayDO returnVisitWayDO) {
		if(BlankUtil.isBlank(returnVisitWayDO)){
			returnVisitWayDO = new ReturnVisitWayDO();
		}
		BeanUtil.convertVoAsDo(returnVisitWayVO, returnVisitWayDO);
		if(!BlankUtil.isBlank(returnVisitWayVO.getCreator())){
			returnVisitWayDO.setSysInfo(createInfo(returnVisitWayVO.getCreator()));
		}
		return returnVisitWayDO;
	}

	/**
	 * 方法描述: ReturnVisitWayDO To ReturnVisitWayVO
	 * @author 胡煦
	 * Create on:2008-12-16
	 * @param returnVisitWayDO
	 * @param returnVisitWayVO
	 * @return ReturnVisitWayVO
	 */
	private ReturnVisitWayVO assembleD2V(ReturnVisitWayDO returnVisitWayDO,ReturnVisitWayVO returnVisitWayVO) {
		if(BlankUtil.isBlank(returnVisitWayVO)){
			returnVisitWayVO = new ReturnVisitWayVO();
		}
		PopulateUtil.populate(returnVisitWayDO, returnVisitWayVO);
		return returnVisitWayVO;
	}
	private IReturnVisitWayDao returnVisitWayDao;
	/**
	 * @param returnVisitWayDao the returnVisitWayDao to set
	 */
	public void setReturnVisitWayDao(IReturnVisitWayDao returnVisitWayDao) {
		this.returnVisitWayDao = returnVisitWayDao;
	}
}
